﻿// load các module cần thiết cho API
var application_root = __dirname,
    express = require("express"),
    path = require("path"),
    mongoose = require('mongoose');

// tạo ra các máy chủ Web.
var app = express.createServer();

// Kết nối database có tên là blog
mongoose.connect('mongodb://localhost/blog');

// Config
app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    //Các máy chủ web cũng có thể phục vụ các tập tin tĩnh trong một thư mục public
    app.use(express.static(path.join(application_root, "public")));
    app.use(express.errorHandler({
        dumpExceptions: true,
        showStack: true
    }));
});

var Schema = mongoose.Schema; //Schema.ObjectId
// Tạo giản đồ post
// Có thể tham khảo thêm thông tin tại đây http://mongoosejs.com/docs/guide.html
var Post = new Schema({
    title: {
        type: String,
        required: true
    },
    content: {
        type: String,
        required: true
    },
    _creator: {
        type: String,
        required: true
    },
    createTime: {
        type: Date,
        default: Date.now
    }
});


var PostModel = mongoose.model('Post', Post);
// REST api

app.get('/api', function(req, res) {
    res.send('API is running');
});

// Phương thức POST để tạo bài viết
app.post('/api/post', function(req, res) {
    var post;
    post = new PostModel({
        title: req.body.title,
        content: req.body.content,
        _creator: req.body._creator,
    });
    post.save(function(err) {
        if (!err) {
            return console.log("created");
        } else {
            return console.log(err);
        }
    });
    return res.send(post);
});

// Phương thức PUT để sửa bài viết
app.put('/api/post/:id', function(req, res) {
    return PostModel.findById(req.params.id, function(err, post) {
        post.title = req.body.title;
        post.content = req.body.content;
        return post.save(function(err) {
            if (!err) {
                console.log("updated");
            } else {
                console.log(err);
            }
            return res.send(post);
        });
    });
});

// Phương thức GET danh sách để lấy danh sách bài viết
app.get('/api/post', function(req, res) {
    return PostModel.find(function(err, posts) {
        if (!err) {
            return res.send(posts);
        } else {
            return console.log(err);
        }
    });
});

// Phương thức GET để lấy 1 bài viết
app.get('/api/post/:id', function(req, res) {
    return PostModel.findById(req.params.id, function(err, post) {
        if (!err) {
            return res.send(post);
        } else {
            return console.log(err);
        }
    });
});

// Phương thức DELETE để xóa 1 bài viết
app.delete('/api/post/:id', function(req, res) {
    return PostModel.findById(req.params.id, function(err, post) {
        return post.remove(function(err) {
            if (!err) {
                return res.send('deleted');
            } else {
                console.log(err);
            }
        });
    });
});
//Thiết lập máy chủ đáp ứng URL: http://localhost:8888
app.listen(8888);
